#pragma once

#include <QString>
#include <QObject>
#include <boost/shared_ptr.hpp>

namespace formats {

class AbstractFormat : public QObject
{
  Q_OBJECT

public:
  virtual ~AbstractFormat() {}

public slots:
  virtual bool IsStorable() const = 0;
  virtual bool IsRestorable() const = 0;
  virtual void Store(QObject *, const QString &) const = 0;
  virtual QObject *Restore(const QString &) const = 0;
  virtual QString GetDisplayName() const = 0;
  virtual QString GetFilter() const = 0;
};

} // namespace formats